// import fs from 'fs';
// import Joi from 'joi';
// import {Context} from 'koa';
// import path from 'path';
// import sharp from 'sharp';
// import {SERVER_ADDR, STATIC_TMP_PATH} from '@/config';
// import {validateRequestFile} from '@/utils/ValidateDecorator';
// import {WrapperResponse} from '@/utils/wrapperResponse';

// class ImageController {
//     @validateRequestFile(Joi.object().keys({
//         file: Joi.alternatives(Joi.object(), Joi.array()).required()
//     }))
//     async compressImg(ctx: Context) {
//         const {file} = ctx.request.files!;
//         const files = Array.isArray(file) ? file : [file];
//         const res = await Promise.all(files.map(async item => {
//             const {newFilename, filepath, size} = item;
//             const extension = path.extname(newFilename);
//             const pathname = `${STATIC_TMP_PATH}/compress/${newFilename}`;

//             const sharpInc = sharp(filepath);
//             const options = {quality: 80};
//             switch (extension) {
//             case '.png':
//                 sharpInc.png(options);
//                 break;
//             case '.jpeg':
//             case '.jpg':
//                 sharpInc.jpeg(options);
//                 break;
//             case '.webp':
//                 sharpInc.webp(options);
//                 break;
//             default:
//                 throw new Error('Unsupported image format');
//             }

//             const buf = await sharpInc.toBuffer();
//             fs.writeFileSync(pathname, buf, {flag: 'w+'});
//             const stat = fs.statSync(pathname);

//             return {
//                 originSize: (size / 1024).toFixed(2) + 'KB',
//                 currentSize: (stat.size / 1024).toFixed(2) + 'KB',
//                 compressRatio: ((size - stat.size) * 100 / size).toFixed(2) + '%',
//                 url: `${SERVER_ADDR}/tmp/compress/${newFilename}`
//             };
//         }));
//         ctx.body = WrapperResponse.success(res);
//     }
// }

// export default new ImageController();
